//package com.jye.rseven.user.Interceptor;
//
//import com.jye.rseven.user.util.RedisUtils;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.web.servlet.HandlerInterceptor;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.util.Optional;
//
//@Configuration
//@Slf4j
//public class JwtInterceptor implements HandlerInterceptor {
//
//    @Autowired
//    private RedisUtils redisUtils;
//
//    @Override
//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        // 允许跨域
//        response.setHeader("Access-Control-Allow-Origin", "*");
//        String token = request.getHeader("authorization");
//        //服务器内置的token，用于测试接口
//        if ("testToken".equals(token)) {
//            return true;
//        }
//
//        // 1.----------- 解析jwt信息
//
//        //判断token是否为null，使用Optional防止出现空指针异常（optional可以接受null值）
//        Optional.ofNullable(token)
//                .map(n -> {
//                    //判断token是否过期，过期则抛出异常
//                    try {
//                        log.info("----->" + n);
//                        log.info("----->" + JwtUtils.parseJWT(n));
//                        return JwtUtils.parseJWT(n);
//                    } catch (Exception e) {
//                        log.warn(">>>>>>>>>>>>>>>>>>token不存在!，重新授权登录！>>>>>>>>>>>>>>>>>>");
//                        throw new RuntimeException("token不存在!，重新授权登录！");
//                    }
//                });
//
////        // 2.------------- 数据库交互
////        //解密出该用户的unionid，并去数据库教验是否存在，不存在则让其重新授权登录
////        Claims claims = JwtUtils.parseJWT(token);
////        String base64UnionId = (String) claims.get("key");
////        if("admin".equals(claims.getSubject())){
////            //后台登录情况
////        }
////        byte[] decode = Base64.getDecoder().decode(base64UnionId);
////        String unionId = new String(decode);
////        TbGuestExample tbGuestExample = new TbGuestExample();
////        tbGuestExample.createCriteria().andUnionidEqualTo(unionId);
////        long i = tbGuestMapper.countByExample(tbGuestExample);
////        if(i < 1){
////            //不存在该用户
////            log.warn("用户unionid:" + unionId + "不存在于数据库中，重新授权登陆");
////            return false;
////        }
//
//        //解析token
//        Claims claims = JwtUtils.parseJWT(token);
//        //获取登录token标识
//        String base64UnionId = (String)claims.get("key");
//        //分情况登录
//        //后台登录
//        if("admin".equals(claims.getSubject())){
//
//        }
//        // 小程序登录
//        // 取出token中的unionid
//        byte[] decode = Base64.getDecoder().decode(base64UnionId);
//        String unionId = new String(decode);
//        //查redis中有无该token
//        String tokenKey = "token:"+unionId;
//        log.info("redis中查到相关token");
//        if (redisUtils.get(tokenKey) == null){
//            //不存在该key
//            log.warn("用户unionid:" + unionId + "不存在于数据库中，重新授权登陆");
//            return false;
//        }
//        return true;
//    }
//}